# -*-coding:utf-8-*-
# -*-coding:utf-8-*-
import re
from utils import read_txt, cut_sent, read_word, read_pos, read_hed
from Syntactic_Analysis import ParseResult
from find_chusuoci import find_chusuoci
'''
存现句分三段
前段：处所词，可同时出现时间词语
中段：不以物动词或“有”、“是”，可以附带助词“着”、“了”
后段：存现宾语
type_lst = ['主[处所词]||动+“着/了”+宾[存在的事物]', '主[处所词]||动+“了”/趋向补语/结果补语+宾[出现、消失事物]',
            '主[处所词]||“是”+宾', '主[处所词]||“有”+宾', '非存现句']
            
存在ddpaser句法分词和词性标注偏差引起的误差
如 谓语应为动词        他的脸上透出一丝丝笑容  ---将“透”识别为a，导致无法成功判断为存现句
分词不正确的情形       老王家生了个胖小子 ---老 王家生 了 个 胖 小子
'''



def judge_type(hed_info,modifi_info):
    sbv_info = modifi_info['sbv_info']  # SBV成分
    vob_info = modifi_info['vob_info']  # VOB成分
    adv_info = modifi_info['adv_info']  # ADV成分
    att_info = modifi_info['att_info']  # ATT成分
    mt_info = modifi_info['mt_info']  # MT成分
    cmp_info = modifi_info['cmp_info']  # CMP成分
    sbv_h = read_hed(sbv_info, hed_info['word'])  # 修饰HED的SBV成分
    vob_h = read_hed(vob_info, hed_info['word'])  # 修饰HED的VOB成分
    adv_h = read_hed(adv_info, hed_info['word'])  # 修饰HED的ADV成分
    mt_h = read_hed(mt_info, hed_info['word'])    # 修饰HED的MT成分
    cmp_h = read_hed(cmp_info, hed_info['word'])  # 修饰HED的CMP成分

    type_lst = ['主[处所词]||动+“着/了”+宾[存在的事物]', '主[处所词]||动+“了”/趋向补语/结果补语+宾[出现、消失事物]',
            '主[处所词]||“是”+宾', '主[处所词]||“有”+宾', '其他句型']
    noun_lst = ['n', 'f', 's', 't', 'nr', 'ns', 'nt', 'nw', 'nz', 'r', 'PER', 'LOC', 'ORG']       # 宾语词性表
    verb_lst = ['v', 'vd', 'vn']

    type_id = len(type_lst) - 1     # 非存现句
    if re.findall(r'\u662f',hed_info['word']):       # HED为“是”
        type_id = 2
        return type_lst[type_id]
    if re.findall(r'\u6709',hed_info['word']):       # HED为“有”
        type_id = 3
        return type_lst[type_id]
    if hed_info['pos'] in verb_lst and vob_h and vob_h['pos'] in noun_lst:      # 基本结构： 主 谓 宾  谓语动词作为HED，宾语为名词
        if cmp_h and cmp_h['pos'] in noun_lst+verb_lst:     # 趋向或结果通常用名词或动词表示
            type_id = 1
            return type_lst[type_id]
        if mt_h and mt_h['word'] in  ['着','了']:
            type_id = 0
            return type_lst[type_id]
    return type_lst[type_id]



if __name__ == '__main__':
    path = './data/test_cunxian.txt'
    sents = read_txt(path)
    for sent in sents:
        print('*' * 125)
        print(sent)
        fenci_res, pos_res, ddp_res = cut_sent(sent)
        pr = ParseResult(fenci_res, pos_res, ddp_res)
        print('分词：', fenci_res)
        print('词性：', pos_res)
        print('句法：', ddp_res)
        modifi_info = pr.get_modifi_info()
        hed_info = pr.get_hed_info()
        # 先判断主语是否为处所词
        if find_chusuoci(sent) > -1:
            print(judge_type(hed_info, modifi_info))
        else:
            print('非存现句')

